\section{L'héritage de classe}

\subsection{La classe PassagerAbstrait}

\textit{Pourquoi cette classe doit-elle être déclarée abstraite ?}

Elle doit être déclarée abstraite car les méthodes monterDans() et nouvelArret() seront différentes selon les classes filles.

\textit{Cette classe n’est pas instanciable mais elle a un constructeur. Expliquez pourquoi ?}

Le constructeur sera utilisé non pas directement par la classe mais par ses classes filles.

\subsection{La classe PassagerStandard}

\textit{Expliquer pourquoi changer la portée (par le mot-clé protected) de la variable stockant la destination ne respecte pas l’encapsulation.}

Il peut être tentant de changer la portée de cette variable en protected car cela permet aux sous-classes d'y accéder, mais en réalité elle est propre à la classe PassagerAbstrait et doit donc rester private. Toutefois, pour fournir cette information, on peut créer une méthode dans PassagerAbstrait qui retourne l'entier destination.

\textit{Pourquoi l’appel au constructeur de la classe de base est-il nécessaire ?}

Les attributs de la classe de base étant private, les classes filles ne peuvent y accéder. Elles doivent donc nécessairement passer par le constructeur de la classe de base.

\textit{Si le corps du constructeur de PassagerStandard est vide, vous obtenez un message d’erreur. Expliquez ce message d’erreur.}

L'erreur est la suivante :

\begin{verbatim}
PassagerStandard.java:5: cannot find symbol
symbol  : constructor PassagerAbstrait()
location: class tec.PassagerAbstrait
    public PassagerStandard(String nom, int destination) {
                                                         ^
1 error
\end{verbatim}

Cela signifie qu'arrivé au constructeur de PassagerStandard, le compilateur se reporte directement au constructeur de la classe de base, PassagerAbstrait.
